/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ourpkr.view;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.geom.*;
import org.apache.batik.swing.*;
import org.apache.batik.swing.svg.*;
import org.w3c.dom.svg.*;

/**
 * Vue d'une carte
 * @author nb888
 */
public class aCarte extends JSVGCanvas {

    /**
     * Fichier contenant l'ensemble des cartes
     */
    SVGDocument doc;

    public int getColor() {
        return color;
    }

    public void setColor(int color) {
        this.color = color;
        resize();
        transform();
    }

    public int getVal() {
        return val;
    }

    public void setVal(int val) {
        this.val = val;
        resize();
        transform();
    }
    //Couleur + Valeur de la carte
    /**
     * Couleur de la carte (0 - 4) 4 = Cartes spéciales : joker, dos
     */
    private int color = 0;
    /**
     * Valeur de la carte (0-12)
     */
    private int val = 0;
    //Parametre du SVGCanvas
    /**
     * Largeur du doc
     */
    private double W = 0;
    /**
     * Hauteur du doc
     */
    private double H = 0;
    /**
     * Niveau de zoom
     */
    private double zoomLevel = 0.2;
    /**
     * Largeur d'une carte
     */
    private double aW;
    /**
     * Hauteur d'une carte
     */
    private double aH;

    public double getH() {
        return H;
    }

    public double getW() {
        return W;
    }

    public double getAH() {
        return aH;
    }

    public double getAW() {
        return aW;
    }

    public aCarte(SVGDocument doc, double W, double H) {
        this.doc = doc;
        setDim(W, H);
        this.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() {

            public void gvtBuildStarted(GVTTreeBuilderEvent e) {
            // Build Started
            }

            public void gvtBuildCompleted(GVTTreeBuilderEvent e) {
                // Build Done
                transform();
            }
        });
        this.setDocument(this.doc);
        this.setBackground(new Color(238, 238, 238));
    }

    private void transform() {
        AffineTransform tZoom = AffineTransform.getScaleInstance(zoomLevel, zoomLevel);
        AffineTransform tTrans = AffineTransform.getTranslateInstance(-val * aW, -color * aH);
        tTrans.concatenate(tZoom);
        setRenderingTransform(tTrans);
    }

    private void resize() {
        Dimension d = new Dimension((int) aW, (int) aH);
        this.setSize(d);
        this.setMaximumSize(d);
        this.setMinimumSize(d);
        this.setMySize(d);
        this.setPreferredSize(d);
    }

    private void setDim(double W, double H) {
        this.W = W;
        this.H = H;
        aW = ((W * zoomLevel) / 13.0);
        aH = ((H * zoomLevel) / 5.0);
        resize();
    }
}
